导航菜单
首页 >  Android悬浮窗的简单实现  > WindowManager 悬浮窗口

WindowManager 悬浮窗口

要实现类似于 360 那样的悬浮框,可以使用 WindowManager 来实现

思路

我们再来理清下逻辑,我们需要当处于手机的普通界面,即桌面的时候,悬浮框才显示,而当启动其它 App 时,这个悬浮框应该消失不见,当我们退出 app 又回到桌面,这个悬浮框又要重新出现

我们需要使用一个定时器, 每隔一段时间来进行一系列的判断,比如:是否在桌面,是否已加载悬浮框,否则加载;否则,如果加载了,就将这个悬浮框移除

实现

创建一个 空的 Android 项目 cn.twle.android.FloatWindow

修改 activity_main.xml 添加一个按钮用户开启悬浮框

需要一个后台的 Service 在后台等待我们的操作,比如完成悬浮框的绘制移除等,

因此首先要定义一个 Service 实现一个创建悬浮框 View 的一个方法

MsMainServer.java

package cn.twle.android.floatwindow;;import android.app.ActivityManager;import android.app.Service;import android.content.Context;import android.content.Intent;import android.content.pm.PackageManager;import android.content.pm.ResolveInfo;import android.graphics.PixelFormat;import android.os.Handler;import android.os.IBinder;import android.os.Message;import android.view.Gravity;import android.view.MotionEvent;import android.view.View;import android.view.WindowManager;import android.widget.Button;import java.util.ArrayList;import java.util.List;public class MsMainService extends Service {private boolean isAdded = false; // 是否已增加悬浮窗public static final int OPERATION_SHOW = 100;public static final int OPERATION_HIDE = 101;private static final int HANDLE_CHECK_ACTIVITY = 200;public static final String OPERATION = "operation";private static WindowManager windowManager;private static WindowManager.LayoutParams params;private Button btnView;private ActivityManager mActivityManager;private List homeList; // 桌面应用程序包名列表//定义一个更新界面的Handlerprivate Handler mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case HANDLE_CHECK_ACTIVITY:if (isHome()) {if (!isAdded) {windowManager.addView(btnView, params);isAdded = true;new Thread(new Runnable() {public void run() {for (int i = 0; i

相关推荐: